<?php
declare(strict_types=1);
// 商品库存
namespace app\admin_v1\controller;
use think\facade\Db; //门面模式
use app\admin_v1\model\Stock as mysql; //导入模型
class Stock
{
    
    // 商品档案自动编号生成
    public function GoodsAutoNumber()
    {
        $time_int = time();
        $time = date('Y-m-d H:i:s', $time_int);
        // 模型查询返回数据集对象
        $list = mysql::where([['id', '>', 0], ['unit_pack', '=', 'B']])->select();
        // (count($list) + 1)
        $apidb = [
            'code' => 200, //状态码
            'msg' => '获取商品档案自动编号', //状态信息
            'time' => $time,
            'time_int' => time(),
            'count' => str_pad((string)(count($list) + 1), 6, "0", STR_PAD_LEFT), //获取数据集的数量
        ];
        return (json($apidb));
    }
    // 辅助条码-新增
    public function barcodenew()
    {
        $query = request()->param(); //请求参数
        // 1.查商品档案确定有对应商品-
        // 2.查辅助条码表确定要增加的条码是否已存在-
        $goods_dbid = null;
        $goods_dbid = mysql::where([['dbid', '=', $query['goods_dbid']]])->find(); //查商品档案是否有对应商品
        if ($goods_dbid) {
            # 商品档案存在-接着查辅助条码
            $barcode_db =  Db::table('admin__i_goods_barcode')->where([
                ['goods_dbid', '=', $query['goods_dbid']],
                ['barcode', '=', $query['barcode']]
            ])->find();
            if ($barcode_db == null) {
                # 辅助条码不存在-进行新增
                $insert_data = [
                    'barcode' => $query['barcode'], //辅助条码
                    'goods_dbid' => $query['goods_dbid'], //商品数据编号
                    'db_state' => 'C' //数据状态_A正常B停用C只读D回收站E删除
                ];
                $insert_db =  Db::name('admin__i_goods_barcode')->strict(false)->insert($insert_data); //辅助条码表-新建
                if ($insert_db > 0) {
                    $msg = '新增辅助条码成功!';
                    $code = 200;
                } else {
                    $msg = '新增辅助条码失败!';
                    $code = 203;
                }
            } else {
                // if ($goods_dbid['db_state'] == 'A') {
                //     //数据状态_A正常B停用C只读D回收站E删除
                //     Db::name('admin__i_goods_barcode')
                //         ->where([
                //             ['barcode' => $query['barcode']],
                //             ['goods_dbid' => $query['goods_dbid']]
                //         ])
                //         ->update(['barcode' => $query['barcode']]);
                //     $msg = '对应辅助条码已更新!';
                //     $code = 200;
                // } else {
                //     $msg = '对应辅助条码已存在!';
                //     $code = 202;
                // }
                $msg = '对应辅助条码已存在!';
                $code = 202;
            }
        } else {
            $msg = '对应商品不存在!' . $query['goods_dbid'];
            $code = 201;
        }
        $apidb = [
            'code' => $code, //状态码
            'msg' => $msg, //状态信息
            'query' => $query, //请求参数
            // 'db_old' => $original_sqldb,
            // 'db_now' => $sqldb->toArray(),
            // 'unit_tab' => $query['unit_tab'],
        ];
        return (json($apidb));
    }
    // 新增
    public function new()
    {
        $query = request()->param(); //请求参数
        $time_int = time();
        $time = date('Y-m-d H:i:s', $time_int);
        $dbid = 'DID-' . common__guid()["salt_any"];
        $sqldb = mysql::create(
            [
                'dbid' => $dbid, //数据编号.唯一
                'name' => (isset($query['name']) && !empty($query['name'])) ? $query['name'] : "未命名商品", //名称
                'cls_id' => (isset($query['cls_id']) && !empty($query['cls_id'])) ? $query['cls_id'] : 1, //商品分类id
                'state' => (isset($query['state']) && !empty($query['state'])) ? $query['state'] : "A", //商品状态_A正常B停用C只销
                'sup_dbid' => (isset($query['sup_dbid']) && !empty($query['sup_dbid'])) ? $query['sup_dbid'] : "SUP-SYS", //主供货商数据编号-默认SUP-SYS
                'auto_number' => (isset($query['auto_number']) && !empty($query['auto_number'])) ? $query['auto_number'] : null, //自动编号
                'unit_goods_dbid' => $dbid, //大单位商品数据编号(基本单位等于自己)
                'unit_pack' => 'B', //是否大单位_A是B否
                'barcode' => $query['barcode'], //主条码
                'unit' => $query['unit'], //单位
                'unit_factor' => 1, //内装量
                'off_putaway_web' => (isset($query['off_putaway_web']) && !empty($query['off_putaway_web'])) ? (int)$query['off_putaway_web'] : 1, //上架商城
                'prc_in' => (isset($query['prc_in']) && !empty($query['prc_in'])) ? $query['prc_in'] : 1.00, //进价
                'prc_cust' => (isset($query['prc_cust']) && !empty($query['prc_cust'])) ? $query['prc_cust'] : 2.00, //批发价
                'prc_vip' => (isset($query['prc_vip']) && !empty($query['prc_vip'])) ? $query['prc_vip'] : 3.00, //会员价
                'prc_sale' => (isset($query['prc_sale']) && !empty($query['prc_sale'])) ? $query['prc_sale'] : 4.00, //零售价
                'prc_web' => (isset($query['prc_web']) && !empty($query['prc_web'])) ? $query['prc_web'] : 5.00, //商城价
                'prc_groupon' => (isset($query['prc_groupon']) && !empty($query['prc_groupon'])) ? $query['prc_groupon'] : 6.00, //团购价
                'prc_dist' => (isset($query['prc_dist']) && !empty($query['prc_dist'])) ? $query['prc_dist'] : 7.00, //配送价
                'prc_same' => (isset($query['prc_same']) && !empty($query['prc_same'])) ? $query['prc_same'] : 8.00, //同行价
                'time_new' => $time_int, //创建时间
                'time_up' => $time_int, //修改时间
                'i' =>   999, //排序
            ],
            // 许可写入的字段
            [
                'dbid', //数据编号.唯一
                'unit_goods_dbid', //大单位商品数据编号(基本单位等于自己)
                'auto_number', //自动编号
                'unit_pack', //是否大单位_A是B否
                'barcode', //主条码
                'unit', //单位
                'unit_factor', //内装量
                'unit_size', //包装规格
                'name', //名称
                'off_putaway_web', //上架商城
                'prc_in', //进价
                'prc_cust', //批发价
                'prc_vip', //会员价
                'prc_sale', //零售价
                'prc_web', //商城价
                'prc_groupon', //团购价
                'prc_dist', //配送价
                'prc_same', //同行价
                'time_new', //创建时间
                'time_up', //修改时间
                'i', //排序
            ]
        );
        $apidb = [
            'code' => 200, //状态码
            'msg' => '新增成功', //状态信息
            'query' => $query, //请求参数
            'data_now' => $sqldb->toArray(),
            'data' => ['id' => $sqldb->id],
        ];
        return (json($apidb));
    }
    // 修改
    public function up()
    {
        $time_int = time();
        $time = date('Y-m-d H:i:s', $time_int);
        $query = request()->param(); //请求参数
        $sqldb = mysql::where([
            ['id', '=',  $query['id']],
        ])->find();
        if ($sqldb) {
            for ($i = 0; $i < count($query['unit_tab']); $i++) {
                // 根据前端提交的大单位数据包，查是否存在数据库，存在进行修改，不存在进行新增
                if ($query['unit_tab'][$i]['unit_pack'] == "A") {
                    $sql_find_db = mysql::where([
                        ['dbid', '=',  $query['unit_tab'][$i]['dbid']],
                        ['unit_goods_dbid', '=',  $query['dbid']],
                        ['unit_pack', '=', 'A'],
                    ])->findOrEmpty();
                    // 数据集为空--大单位-不存在进行新增
                    if ($sql_find_db->isEmpty()) {
                        // 新建多单位包装
                        $sql_new = mysql::create(
                            [
                                'dbid' => 'DID-' . common__guid()["salt_any"], //数据编号.唯一
                                'unit_goods_dbid' => (isset($query['dbid']) && !empty($query['dbid'])) ? $query['dbid'] : "null", //大单位商品数据编号(基本单位等于自己)
                                'unit_pack' => 'A', //是否大单位_A是B否
                                'barcode' => $query['unit_tab'][$i]['barcode'], //主条码
                                'unit' => $query['unit_tab'][$i]['unit'], //单位
                                'unit_factor' => $query['unit_tab'][$i]['unit_factor'], //内装量
                                'unit_size' => $query['unit_tab'][$i]['unit_size'], //包装规格
                                'name' => (isset($query['unit_tab'][$i]['name']) && !empty($query['unit_tab'][$i]['name'])) ? $query['unit_tab'][$i]['name'] :  "未命名商品ss", //名称
                                'off_putaway_web' => (isset($query['unit_tab'][$i]['off_putaway_web']) && !empty($query['unit_tab'][$i]['off_putaway_web'])) ? (int)$query['unit_tab'][$i]['off_putaway_web'] : 1, //上架商城
                                'prc_in' => (isset($query['unit_tab'][$i]['prc_in']) && !empty($query['unit_tab'][$i]['prc_in'])) ? $query['unit_tab'][$i]['prc_in'] : 1.00, //进价
                                'prc_cust' => (isset($query['unit_tab'][$i]['prc_cust']) && !empty($query['unit_tab'][$i]['prc_cust'])) ? $query['unit_tab'][$i]['prc_cust'] : 2.00, //批发价
                                'prc_vip' => (isset($query['unit_tab'][$i]['prc_vip']) && !empty($query['unit_tab'][$i]['prc_vip'])) ? $query['unit_tab'][$i]['prc_vip'] : 3.00, //会员价
                                'prc_sale' => (isset($query['unit_tab'][$i]['prc_sale']) && !empty($query['unit_tab'][$i]['prc_sale'])) ? $query['unit_tab'][$i]['prc_sale'] : 4.00, //零售价
                                'prc_web' => (isset($query['unit_tab'][$i]['prc_web']) && !empty($query['unit_tab'][$i]['prc_web'])) ? $query['unit_tab'][$i]['prc_web'] : 5.00, //商城价
                                'prc_groupon' => (isset($query['unit_tab'][$i]['prc_groupon']) && !empty($query['unit_tab'][$i]['prc_groupon'])) ? $query['unit_tab'][$i]['prc_groupon'] : 6.00, //团购价
                                'prc_dist' => (isset($query['unit_tab'][$i]['prc_dist']) && !empty($query['unit_tab'][$i]['prc_dist'])) ? $query['unit_tab'][$i]['prc_dist'] : 7.00, //配送价
                                'prc_same' => (isset($query['unit_tab'][$i]['prc_same']) && !empty($query['unit_tab'][$i]['prc_same'])) ? $query['unit_tab'][$i]['prc_same'] : 8.00, //同行价
                                'time_new' => $time_int, //创建时间
                                'time_up' => $time_int, //修改时间
                                'i' =>   999, //排序
                            ],
                            // 许可写入的字段
                            [
                                'dbid', //数据编号.唯一
                                'unit_goods_dbid', //大单位商品数据编号(基本单位等于自己)
                                'unit_pack', //是否大单位_A是B否
                                'barcode', //主条码
                                'unit', //单位
                                'unit_factor', //内装量
                                'unit_size', //包装规格
                                'name', //名称
                                'off_putaway_web', //上架商城
                                'prc_in', //进价
                                'prc_cust', //批发价
                                'prc_vip', //会员价
                                'prc_sale', //零售价
                                'prc_web', //商城价
                                'prc_groupon', //团购价
                                'prc_dist', //配送价
                                'prc_same', //同行价
                                'time_new', //创建时间
                                'time_up', //修改时间
                                'i', //排序
                            ]
                        );
                    } else {
                        // 大单位-存在进行修改
                        $sql_find_db->barcode = (isset($query['unit_tab'][$i]['barcode']) && !empty($query['unit_tab'][$i]['barcode'])) ? $query['unit_tab'][$i]['barcode'] :  "主条码"; //主条码
                        $sql_find_db->name = (isset($query['unit_tab'][$i]['name']) && !empty($query['unit_tab'][$i]['name'])) ? $query['unit_tab'][$i]['name'] :  "未命名商品"; //名称
                        $sql_find_db->unit = (isset($query['unit_tab'][$i]['unit']) && !empty($query['unit_tab'][$i]['unit'])) ? $query['unit_tab'][$i]['unit'] :  "单位"; //单位
                        $sql_find_db->unit_factor = (isset($query['unit_tab'][$i]['unit_factor']) && !empty($query['unit_tab'][$i]['unit_factor'])) ? $query['unit_tab'][$i]['unit_factor'] :  "内装量"; //内装量
                        $sql_find_db->unit_size = (isset($query['unit_tab'][$i]['unit_size']) && !empty($query['unit_tab'][$i]['unit_size'])) ? $query['unit_tab'][$i]['unit_size'] :  "包装规格"; //包装规格
                        $sql_find_db->off_putaway_web  = (isset($query['unit_tab'][$i]['off_putaway_web']) && !empty($query['unit_tab'][$i]['off_putaway_web'])) ? (int)$query['unit_tab'][$i]['off_putaway_web'] : 0; //上架商城
                        $sql_find_db->prc_in = (isset($query['unit_tab'][$i]['prc_in']) && !empty($query['unit_tab'][$i]['prc_in'])) ? $query['unit_tab'][$i]['prc_in'] : 0.00; //进价
                        $sql_find_db->prc_cust = (isset($query['unit_tab'][$i]['prc_cust']) && !empty($query['unit_tab'][$i]['prc_cust'])) ? $query['unit_tab'][$i]['prc_cust'] : 0.00; //批发价
                        $sql_find_db->prc_vip = (isset($query['unit_tab'][$i]['prc_vip']) && !empty($query['unit_tab'][$i]['prc_vip'])) ? $query['unit_tab'][$i]['prc_vip'] : 0.00; //会员价
                        $sql_find_db->prc_sale = (isset($query['unit_tab'][$i]['prc_sale']) && !empty($query['unit_tab'][$i]['prc_sale'])) ? $query['unit_tab'][$i]['prc_sale'] : 0.00; //零售价
                        $sql_find_db->prc_web = (isset($query['unit_tab'][$i]['prc_web']) && !empty($query['unit_tab'][$i]['prc_web'])) ? $query['unit_tab'][$i]['prc_web'] : 0.00; //商城价
                        $sql_find_db->prc_groupon = (isset($query['unit_tab'][$i]['prc_groupon']) && !empty($query['unit_tab'][$i]['prc_groupon'])) ? $query['unit_tab'][$i]['prc_groupon'] : 0.00; //团购价
                        $sql_find_db->prc_dist = (isset($query['unit_tab'][$i]['prc_dist']) && !empty($query['unit_tab'][$i]['prc_dist'])) ? $query['unit_tab'][$i]['prc_dist'] : 0.00; //配送价
                        $sql_find_db->prc_same = (isset($query['unit_tab'][$i]['prc_same']) && !empty($query['unit_tab'][$i]['prc_same'])) ? $query['unit_tab'][$i]['prc_same'] : 0.00; //同行价
                        $sql_find_db->save();
                    }
                }
                // 基本单位部分
                $sqldb->barcode = (isset($query['barcode']) && !empty($query['barcode'])) ? $query['barcode'] :  "主条码"; //主条码
                $sqldb->unit = (isset($query['unit']) && !empty($query['unit'])) ? $query['unit'] :  "单位"; //单位
                $sqldb->unit_size = (isset($query['unit_size']) && !empty($query['unit_size'])) ? $query['unit_size'] :  "包装规格"; //包装规格
                $sqldb->name = (isset($query['name']) && !empty($query['name'])) ? $query['name'] :  "未命名商品"; //名称
                $sqldb->cls_id =  (isset($query['cls_id']) && !empty($query['cls_id'])) ? $query['cls_id'] : 1; //商品分类id
                $sqldb->state =  (isset($query['state']) && !empty($query['state'])) ? $query['state'] : "A"; //商品状态_A正常B停用C只销
                $sqldb->sup_dbid = (isset($query['sup_dbid']) && !empty($query['sup_dbid'])) ? $query['sup_dbid'] : "SUP-SYS"; //主供货商数据编号-默认SUP-SYS
                $sqldb->goods_no = (isset($query['goods_no']) && !empty($query['goods_no'])) ? $query['goods_no'] : "货号"; //货号
                $sqldb->serial_number = (isset($query['serial_number']) && !empty($query['serial_number'])) ? $query['serial_number'] : "serial_number"; //序列号
                $sqldb->auto_number = (isset($query['auto_number']) && !empty($query['auto_number'])) ? $query['auto_number'] : "auto_number"; //自动编号
                $sqldb->auto_number = (isset($query['auto_number']) && !empty($query['auto_number'])) ? $query['auto_number'] : "auto_number"; //自动编号
                $sqldb->custom_code = (isset($query['custom_code']) && !empty($query['custom_code'])) ? $query['custom_code'] : "custom_code"; //自编码
                $sqldb->gross_margin = (isset($query['gross_margin']) && !empty($query['gross_margin'])) ? $query['gross_margin'] : 0.00; //毛利率
                $sqldb->integration = (isset($query['integration']) && !empty($query['integration'])) ? $query['integration'] : 0.00; //积分率
                $sqldb->prc_in = (isset($query['prc_in']) && !empty($query['prc_in'])) ? $query['prc_in'] : 0.00; //进价
                $sqldb->prc_cust = (isset($query['prc_cust']) && !empty($query['prc_cust'])) ? $query['prc_cust'] : 0.00; //批发价
                $sqldb->prc_vip = (isset($query['prc_vip']) && !empty($query['prc_vip'])) ? $query['prc_vip'] : 0.00; //会员价
                $sqldb->prc_sale = (isset($query['prc_sale']) && !empty($query['prc_sale'])) ? $query['prc_sale'] : 0.00; //零售价
                $sqldb->prc_web = (isset($query['prc_web']) && !empty($query['prc_web'])) ? $query['prc_web'] : 0.00; //商城价
                $sqldb->prc_groupon = (isset($query['prc_groupon']) && !empty($query['prc_groupon'])) ? $query['prc_groupon'] : 0.00; //团购价
                $sqldb->prc_dist = (isset($query['prc_dist']) && !empty($query['prc_dist'])) ? $query['prc_dist'] : 0.00; //配送价
                $sqldb->prc_same = (isset($query['prc_same']) && !empty($query['prc_same'])) ? $query['prc_same'] : 0.00; //同行价
                $sqldb->prc_ws = (isset($query['prc_ws']) && !empty($query['prc_ws'])) ? $query['prc_ws'] : 0.00; //微商价
                $sqldb->prc_head = (isset($query['prc_head']) && !empty($query['prc_head'])) ? $query['prc_head'] : 0.00; //团长价
                $sqldb->prc_transfer_goods = (isset($query['prc_transfer_goods']) && !empty($query['prc_transfer_goods'])) ? $query['prc_transfer_goods'] : 0.00; //调货价
                $sqldb->sku_size = (isset($query['sku_size']) && !empty($query['sku_size'])) ? $query['sku_size'] : "规格款式"; //规格款式
                $sqldb->goods_size = (isset($query['goods_size']) && !empty($query['goods_size'])) ? $query['goods_size'] : "商品规格"; //商品规格
                $sqldb->nature_flag = (isset($query['nature_flag']) && !empty($query['nature_flag'])) ? $query['nature_flag'] : "A"; //商品性质_A普通商品B称重商品B计份商品C不定价商品
                $sqldb->group_flag = (isset($query['group_flag']) && !empty($query['group_flag'])) ? $query['group_flag'] : "A"; //组合标志_A普通商品B组装商品C拆分商品D自动拆分商品E自动组装商品
                $sqldb->db_state = (isset($query['db_state']) && !empty($query['db_state'])) ? $query['db_state'] : "A"; //数据状态_A正常B停用C只读D回收站E删除
                $sqldb->time_up = $time_int; //修改时间
                $sqldb->stock_ceiling = (isset($query['stock_ceiling']) && !empty($query['stock_ceiling'])) ? $query['stock_ceiling'] : 0; //库存上限
                $sqldb->stock_lower = (isset($query['stock_lower']) && !empty($query['stock_lower'])) ? $query['stock_lower'] : 0; //库存下限
                $sqldb->expiration = (isset($query['expiration']) && !empty($query['expiration'])) ? $query['expiration'] : 0.00; //保质期(天)
                $sqldb->name_web = (isset($query['name_web']) && !empty($query['name_web'])) ? $query['name_web'] : "商品商城名称"; //商品商城名称
                $sqldb->name_print = (isset($query['name_print']) && !empty($query['name_print'])) ? $query['name_print'] : "商品打印名称"; //商品打印名称
                $sqldb->name_py = (isset($query['name_py']) && !empty($query['name_py'])) ? $query['name_py'] : "商品名称拼音编码"; //商品名称拼音编码
                $sqldb->deduct = (isset($query['deduct']) && !empty($query['deduct'])) ? $query['deduct'] : "A"; //提成方式_A按金额B提成率C按计划
                $sqldb->distribute = (isset($query['distribute']) && !empty($query['distribute'])) ? $query['distribute'] : "A"; //经销方式_A购销B代销C联营D自产自销
                $sqldb->encapsulation = (isset($query['encapsulation']) && !empty($query['encapsulation'])) ? $query['encapsulation'] : "A"; //封装方式_A未知A2其它B1袋装B2瓶装B3罐装B4盒装B5箱装C1裸装C2散装C3无包装C4临封装D1真空袋D2真空罐D3真空装E1桶装E2筒装E3篮箩筐装E4盘装E5网装E6捆扎装E7穿钩装
                $sqldb->toxicity = (isset($query['toxicity']) && !empty($query['toxicity'])) ? $query['toxicity'] : "A"; //毒性_A未知B无毒C剧毒D高毒E中毒F低毒G微毒
                $sqldb->form = (isset($query['form']) && !empty($query['form'])) ? $query['form'] : "A"; //形态_A未知B固体C液体D粉状E软体F其它
                $sqldb->brand = (isset($query['brand']) && !empty($query['brand'])) ? $query['brand'] : "品牌"; //品牌
                $sqldb->producing_area = (isset($query['producing_area']) && !empty($query['producing_area'])) ? $query['producing_area'] : "产地"; //产地
                $sqldb->manufacturers = (isset($query['manufacturers']) && !empty($query['manufacturers'])) ? $query['manufacturers'] : "厂家"; //厂家
                $sqldb->product_model = (isset($query['product_model']) && !empty($query['product_model'])) ? $query['product_model'] : "型号"; //型号
                $sqldb->taste = (isset($query['taste']) && !empty($query['taste'])) ? $query['taste'] : "口味"; //口味
                $sqldb->edition = (isset($query['edition']) && !empty($query['edition'])) ? $query['edition'] : "版本"; //版本
                $sqldb->trademark = (isset($query['trademark']) && !empty($query['trademark'])) ? $query['trademark'] : "商标"; //商标
                $sqldb->colour = (isset($query['colour']) && !empty($query['colour'])) ? $query['colour'] : "颜色"; //颜色
                $sqldb->size = (isset($query['size']) && !empty($query['size'])) ? $query['size'] : "尺寸"; //尺寸
                $sqldb->attribute = (isset($query['attribute']) && !empty($query['attribute'])) ? $query['attribute'] : "属性"; //属性
                $sqldb->gw = (isset($query['gw']) && !empty($query['gw'])) ? $query['gw'] : "毛重"; //毛重
                $sqldb->nw = (isset($query['nw']) && !empty($query['nw'])) ? $query['nw'] : "净重"; //净重
                $sqldb->concentration = (isset($query['concentration']) && !empty($query['concentration'])) ? $query['concentration'] : "浓度"; //浓度
                $sqldb->volume = (isset($query['volume']) && !empty($query['volume'])) ? $query['volume'] : "体积"; //体积
                $sqldb->allergen = (isset($query['allergen']) && !empty($query['allergen'])) ? $query['allergen'] : "过敏源"; //过敏源
                $sqldb->taboos = (isset($query['taboos']) && !empty($query['taboos'])) ? $query['taboos'] : "禁忌"; //禁忌
                //管理开关类
                $sqldb->off_expiration = (isset($query['off_expiration']) && !empty($query['off_expiration'])) ? (int)$query['off_expiration'] : 0; //开关-管保质期_1是0否
                $sqldb->off_stock = (isset($query['off_stock']) && !empty($query['off_stock'])) ? (int)$query['off_stock'] : 0; //开关-管理库存_1是0否
                $sqldb->off_deduct = (isset($query['off_deduct']) && !empty($query['off_deduct'])) ? (int)$query['off_deduct'] : 0; //开关-开启提成_1是0否
                $sqldb->off_discount = (isset($query['off_discount']) && !empty($query['off_discount'])) ? (int)$query['off_discount'] : 0; //开关-可以打折_1是0否
                $sqldb->off_after_sale = (isset($query['off_after_sale']) && !empty($query['off_after_sale'])) ? (int)$query['off_after_sale'] : 0; //开关-拥有售后_1是0否
                $sqldb->off_putaway_web = (isset($query['off_putaway_web']) && !empty($query['off_putaway_web'])) ? (int) $query['off_putaway_web'] : 0; //开关-上架商城_1是0否
                $sqldb->off_print_label = (isset($query['off_print_label']) && !empty($query['off_print_label'])) ? (int)$query['off_print_label'] : 0; //开关-打印标签_1是0否
                $sqldb->off_market_goods = (isset($query['off_market_goods']) && !empty($query['off_market_goods'])) ? (int)$query['off_market_goods'] : 0; //开关-专柜商品_1是0否
                $sqldb->off_freebie = (isset($query['off_freebie']) && !empty($query['off_freebie'])) ? (int)$query['off_freebie'] : 0; //开关-可为赠品_1是0否
                // $sqldb->xxxxxx = (isset($query['xxxxxx']) && !empty($query['xxxxxx'])) ? $query['xxxxxx'] : "A"; //
                $umsg = $sqldb->save();
            }
            if ($umsg  !==   false) {
                $msg = '更新成功!';
                $code = 200;
            } else {
                $msg = '更新失败!';
                $code = 201;
            }
        } else {
            $msg = '更新失败-相关商品不存在。';
            $code = 202;
        }
        $apidb = [
            'code' => $code, //状态码
            'msg' => $msg, //状态信息
            'query' => $query, //请求参数
            'unit_tab' => $query['unit_tab'],
        ];
        return (json($apidb));
    }
    // 找到一条
    public function id()
    {
        $query = request()->param(); //请求参数
        $sqldb = mysql::where([
            ['id', '=',  $query['id']],
            // ['dbid', '=',  $query['dbid']],
        ])->findOrEmpty();
        //设置需要输出的属性
        $sqldb = $sqldb->visible([
            //     'id', //主键
        ]);
        // 设置需要隐藏的输出属性
        $sqldb = $sqldb->hidden([
            //     'id', //主键
        ]);
        // 设置需要附加的输出属性
        $sqldb = $sqldb->append([
            'unit_tab', //附加字段-多包装单位商品包
            'array_prc', //附加字段-价格集
            'off_array', //附加字段-开关集
        ]);
        // 设置数据字段获取器
        // $sqldb = $sqldb->withAttr('name', function($value, $data) {
        // return strtolower($value);
        // });
        if ($sqldb->isEmpty()) {
            // echo '数据集为空';
            $isEmpty = true;
        } else {
            $isEmpty = false;
        }
        $sqldb = $sqldb->toArray(); //以数组方式返回
        if ($isEmpty) {
            $msg = '查询失败-对应商品不存在!';
            $code = 202;
        } else {
            $msg = '查询成功!';
            $code = 200;
            // 找关联多包装单位的商品
            $sql_unit_tab = mysql::where([
                ['unit_goods_dbid', '=',  $sqldb['dbid']],
            ])->append([
                'barcode_data', //附加字段-辅助条码
                'array_prc', //附加字段-价格集
                'off_array', //附加字段-开关集
            ])->order("unit_pack", "desc")
                ->select()
                ->toArray();
            if ($sql_unit_tab) {
                for ($i = 0; $i < count($sql_unit_tab); $i++) {
                    // $li_db[$i]['apitxtx'] = json_decode($li_db[$i]['apitxt'], true); //格式化插入
                    // unset($li_db[$i]); //删除数组中的元素
                    // ksort($li_db[$i]);//根据关联数组的键，对数组进行升序排列
                    // 辅助条码
                    $sql_unit_tab[$i]["barcode_data"] =  Db::table('admin__i_goods_barcode')->where('goods_dbid', $sql_unit_tab[$i]['dbid'])->select();
                    //管理开关类-大单位的包
                    $off_array = [
                        // 'off_expiration' =>$sql_unit_tab[$i]["off_expiration"], //开关-管保质期_1是0否
                        // 'off_stock' =>$sql_unit_tab[$i]["off_stock"], //开关-管理库存_1是0否
                        // 'off_deduct' =>$sql_unit_tab[$i]["off_deduct"], //开关-开启提成_1是0否
                        // 'off_discount' =>$sql_unit_tab[$i]["off_discount"], //开关-可以打折_1是0否
                        // 'off_after_sale' =>$sql_unit_tab[$i]["off_after_sale"], //开关-拥有售后_1是0否
                        'off_putaway_web' => $sql_unit_tab[$i]["off_putaway_web"], //开关-上架商城_1是0否
                        // 'off_print_label' =>$sql_unit_tab[$i]["off_print_label"], //开关-打印标签_1是0否
                        // 'off_market_goods' =>$sql_unit_tab[$i]["off_market_goods"], //开关-专柜商品_1是0否
                        // 'off_freebie' =>$sql_unit_tab[$i]["off_freebie"], //开关-可为赠品_1是0否
                        'off_operation' => $sql_unit_tab[$i]["off_operation"], //开关-产生业务_1是0否
                    ];
                    // unset($li_db[$i]); //删除数组中的元素
                    unset($sql_unit_tab[$i]["off_expiration"]); //开关-管保质期_1是0否
                    unset($sql_unit_tab[$i]["off_stock"]); //开关-管理库存_1是0否
                    unset($sql_unit_tab[$i]["off_deduct"]); //开关-开启提成_1是0否
                    unset($sql_unit_tab[$i]["off_discount"]); //开关-可以打折_1是0否
                    unset($sql_unit_tab[$i]["off_after_sale"]); //开关-拥有售后_1是0否
                    unset($sql_unit_tab[$i]["off_print_label"]); //开关-打印标签_1是0否
                    unset($sql_unit_tab[$i]["off_market_goods"]); //开关-专柜商品_1是0否
                    unset($sql_unit_tab[$i]["off_freebie"]); //开关-可为赠品_1是0否
                    foreach ($off_array as $Key => $value) {
                        if ($value == 1) {
                            $off_array[$Key] = true;
                        } else {
                            $off_array[$Key] = false;
                        }
                    };
                    $sql_unit_tab[$i]["off_array"] = $off_array;
                }
                $sqldb["unit_tab"] = $sql_unit_tab;
            }
            //管理开关类-基本单位的包
            $off_array = [
                'off_expiration' => $sqldb["off_expiration"], //开关-管保质期_1是0否
                'off_stock' => $sqldb["off_stock"], //开关-管理库存_1是0否
                'off_deduct' => $sqldb["off_deduct"], //开关-开启提成_1是0否
                'off_discount' => $sqldb["off_discount"], //开关-可以打折_1是0否
                'off_after_sale' => $sqldb["off_after_sale"], //开关-拥有售后_1是0否
                'off_putaway_web' => $sqldb["off_putaway_web"], //开关-上架商城_1是0否
                'off_print_label' => $sqldb["off_print_label"], //开关-打印标签_1是0否
                'off_market_goods' => $sqldb["off_market_goods"], //开关-专柜商品_1是0否
                'off_freebie' => $sqldb["off_freebie"], //开关-可为赠品_1是0否
                'off_operation' => $sqldb["off_operation"], //开关-产生业务_1是0否
            ];
            foreach ($off_array as $Key => $value) {
                if ($value == 1) {
                    $off_array[$Key] = true;
                } else {
                    $off_array[$Key] = false;
                }
            };
            $sqldb["off_array"] = $off_array;
        }
        // unset($tem_data); //销毁
        // array_push()	将一个或多个元素插入数组的末尾（入栈）。
        // array_merge()	把一个或多个数组合并为一个数组。
        // array_merge_recursive()	递归地把一个或多个数组合并为一个数组。
        // $count = count($list);
        $apidb = [
            'code' => $code, //状态码
            'msg' => $msg, //状态信息
            // 'query' => $query, //请求参数
            'db' => $sqldb,
        ];
        return (json($apidb));
    }
    // 扫码模糊查询商品
    public function GoodsX()
    {
        $query = request()->param(); //请求参数
        if ($query['key'] == "barcode") {
            $sql_where = [
                ['barcode', 'like', '%' . $query['model']['barcode']],
            ];
        } elseif ($query['key'] == "in_code") {
            if ($query['model']['in_code'] == "") {
                $apidb = [
                    'code' => 203, //状态码
                    'msg' => "参数错误-空", //状态信息
                    'query' => $query, //请求参数
                    'db' => [],
                ];
                return (json($apidb));
            } else {
                $sql_where = [
                    ['code_x', 'like', '%' . $query['model']['in_code'] . "|%"], //字段值分隔符|例子：123|3323|kk23|3332|，前端要传|左边第一个起
                ];
            }
        } else {
            $apidb = [
                'code' => 202, //状态码
                'msg' => "参数错误-溢出", //状态信息
                'query' => $query, //请求参数
                'db' => [],
            ];
            return (json($apidb));
        }
        $sqldb = mysql::where($sql_where)->select();
        //设置需要输出的属性
        $sqldb = $sqldb->visible([
            //     'id', //主键
        ]);
        // 设置需要隐藏的输出属性
        $sqldb = $sqldb->hidden([
            //     'id', //主键
        ]);
        // 设置需要附加的输出属性
        $sqldb = $sqldb->append([
            'unit_tab', //附加字段-多包装单位商品包
            'array_prc', //附加字段-价格集
            'off_array', //附加字段-开关集
        ]);
        // 设置数据字段获取器
        $sqldb = $sqldb->withAttr('db_state', function ($value, $data) {
            $res = ["A" => '删除', "B" => '停用', "C" => '只销'];
            return  ["val" => $value, "mp" => $res[$value], "txt" => "商品状态"];
        });
        $sqldb = $sqldb->withAttr('unit_pack', function ($value, $data) {
            $res = ["A" => '是', "B" => '否'];
            return  ["val" => $value, "mp" => $res[$value], "txt" => "是否大单位"];
        });
        $sqldb = $sqldb->withAttr('time_new', function ($value, $data) {
            return  ["val" => $value, "mp" => date('Y-m-d H:i:s', $value), "txt" => "创建时间"];
        });
        $sqldb = $sqldb->withAttr('time_up', function ($value, $data) {
            return  ["val" => $value, "mp" => date('Y-m-d H:i:s', $value), "txt" => "修改时间"];
        });
        if ($sqldb->isEmpty()) {
            $isEmpty = true; //数据集为空
            $count = 0; //数据集行数
            $sqldb = []; //数据集
        } else {
            $isEmpty = false;
            $count = count($sqldb); //数据集行数
            $sqldb = $sqldb->toArray(); //数据集-以数组方式返回
        };
        if ($isEmpty) {
            $msg = '查询失败-对应商品不存在';
            $code = 201;
        } else {
            $msg = '查询成功';
            $code = 200;
            // if ($sql_unit_tab) {
            //     for ($i = 0; $i < count($sql_unit_tab); $i++) {
            //         $sql_unit_tab[$i]["barcode_data"] =  Db::table('admin__i_goods_barcode')->where('goods_dbid', $sql_unit_tab[$i]['dbid'])->select();
            //     }
            //     $sqldb["unit_tab"] = $sql_unit_tab;
            // }
        }
        // unset($tem_data); //销毁
        // array_push()	将一个或多个元素插入数组的末尾（入栈）。
        // array_merge()	把一个或多个数组合并为一个数组。
        // array_merge_recursive()	递归地把一个或多个数组合并为一个数组。
        $apidb = [
            'code' => $code, //状态码
            'msg' => $msg, //状态信息
            'query' => $query, //请求参数
            'count' => $count, //数据集行数
            'db' => $sqldb,
            'getLastSql' => db::getLastSql(),
        ];
        return (json($apidb));
    }
    // 列表
    public function List()
    {
        $query = request()->param(); //请求参数
        $limit = request()->param('limit', 10, 'trim'); //每页行数
        $current = request()->param('current', 1, 'trim'); //页码
        // (isset($query['unit_tab'][$i]['name']) && !empty($query['unit_tab'][$i]['name']))
        if (isset($query["additional"]["use"]) == 1) {
            // additional.use启用额外查询方法-0否-1是。
            $SearchField = $query["additional"]["SearchField"]; //搜索字段
            $SearchOperator = $query["additional"]["SearchOperator"]; //搜索查询表达式
            $SearchaAtistop = $query["additional"]["SearchaAtistop"]; //搜索关键词SearchaAtistop:"[4,28,29,30,31,32,33,34]"
        } else {
            $SearchField = request()->param('SearchField', 'id', 'trim'); //搜索字段
            $SearchOperator = request()->param('SearchOperator', 'LIKE', 'trim'); //搜索查询表达式
            $SearchaAtistop = strval(request()->param('SearchaAtistop', "", 'trim')); //搜索关键词
        }
        $SearchaSort = request()->param('SearchaSort', 'DESC', 'trim'); //搜索排序方式ASE,DESC升降序
        $SearchaSortField = request()->param('SearchaSortField', 'id', 'trim'); //排序字段
        // strval();//转成字符串
        // echo gettype(); //打印变量的类型
        // 查询表达式
        if ($SearchOperator == 'LIKE') {
            $SearchaAtistop = '%' . $SearchaAtistop . '%';
        };
        if ($SearchField == 'time_new' || $SearchField == 'time_up') {
            if ($SearchOperator == '>' || $SearchOperator == '<') {
                $SearchaAtistop = strtotime(strval($SearchaAtistop));
                if ($SearchField == 'time_new') {
                    $SearchField = 'time_new';
                } else if ($SearchField == 'time_up') {
                    $SearchField = 'time_up';
                }
            }
        }
        $help = [
            "db" => [
                "total" => "数据总行数",
                "per_page" => "每页数量",
                "current_page" => "当前页码",
                "last_page" => "最后一页/总页数",
                "data" => "数据集",
                "SearchaAtistop" => $SearchaAtistop
            ]
        ];
        $sqldb = mysql::where([
            [$SearchField, $SearchOperator, $SearchaAtistop],
            // ["cls_id", "IN", [1, 150, 129, 128, 123, 124, 154, 120, 121, 122]],
            // ["unit_pack", "=", "B"], //只查小包单位
        ])
            ->order($SearchaSortField, $SearchaSort)
            ->paginate([ //[文档]https://www.kancloud.cn/manual/thinkphp6_0/1037638
                'list_rows'  => $limit, // 每页数量
                'page'  => $current, // 当前页
                // 'query' => $query,//url额外参数
            ]);
        $sqldb2 = $sqldb->toArray();
        //  当前页起始行
        if ($current > 1) {
            $index2 = $limit * $current - $limit + 1;
        } else {
            $index2 = 1;
        }
        // echo "当前总下标：" . $index2;
        for ($x = 0; $x < count($sqldb); $x++) {
            // $li_db[$x]['apitxtx'] = json_decode($li_db[$x]['apitxt'], true); //格式化插入
            // unset($li_db[$x]); //删除数组中的元素
            // ksort($li_db[$x]);//根据关联数组的键，对数组进行升序排列
            $sqldb2["data"][$x]['index1'] = $x + 1;
            $sqldb2["data"][$x]['index2'] = $index2;
            $index2++;
            $reset = null;
            // $reset = Db::table('admin__i_goods_cls')->where('id', $sqldb2["data"][$x]['cls_id'])->find();
            // $sqldb2["data"][$x]['cls_name'] = !empty($reset["name"]) ? $reset["name"] : "!断链分类" . $sqldb2["data"][$x]['cls_id'];
        }
        $apidb = [
            'api' => ["name" => "商品库存", "help" => $help], //API信息
            'code' => 200, //状态码
            'msg' => "查询成功！", //状态信息
            'query' => $query, //请求参数
            // '_header' => request()->header('token'),
            // '_cache' => cache('userdb_' . request()->header('token')),
            'data' => $sqldb2,
            // 'aaaaaaaa' => db::getLastSql(), //输出上次执行的sql语句/也可以使用fetchSql方法直接返回当前的查询SQL而不执行，例如：echo User::fetchSql()->find(1);
        ];
        // unset($sqldb2); //销毁
        return (json($apidb));
    }
}
